<script>
import wechatConfig from '@/config/wechat.js';
import {
	loginStatus,
	loginById
} from '@/API/geidApis.js';
import { initWeChatShare } from '@/utils/wx-share.js';
import { isWhitelisted } from '@/config/auth-whitelist.js';
import { initRouterGuard } from '@/utils/router-guard.js';

export default {
	onLaunch: function () {
		// console.log('App Launch')
		// console.log("用户信息！")
		
		//初始化路由守卫
		 initRouterGuard();
		
		// // 添加路由变化监听器
		 this.setupRouteListener();
		
		// // 应用启动时也检查认证（使用白名单）
		 this.checkAuthOnResume();
	},
	onShow: function () {
		// console.log('App Show')

		// 只在应用从后台恢复到前台时检查认证
		// 避免页面切换时的重复认证检查
		this.checkAuthOnResume();

		//全局微信分享初始化
		this.initGlobalWeChatShare();
	},
	onHide: function () {
		// console.log('App Hide')
	},
	methods: {
		// 应用恢复前台时的认证检查
		checkAuthOnResume() {
			// 实时路径获取和认证判断
			let currentPath = this.getCurrentPagePath();
			let previousPath = uni.getStorageSync('last_visited_path') || '';
			
			console.log('🧠 实时认证 - 当前路径:', currentPath);
			console.log('🧠 实时认证 - 上个路径:', previousPath);
			
			// 显示页面层级关系
			if (previousPath && currentPath !== previousPath) {
				console.log('📋 页面关系:', `${this.getPageName(previousPath)} → ${this.getPageName(currentPath)}`);
				
				// 如果是首页，显示为上一级页面
				if (currentPath === '/pages/index/index') {
					console.log('🏠 当前页面: 首页 (作为上一级页面显示)');
					// 可以在这里添加特定的首页处理逻辑
				}
			}
			
			// 实时认证逻辑
			if (!isWhitelisted(currentPath)) {
				// 需要认证的页面
				if (isWhitelisted(previousPath)) {
					// 从白名单页面跳转过来，立即严格认证
					console.log('🔒 实时认证：从白名单跳转到需认证页面，立即执行严格验证');
					this.smartVerifyLoginStatus(true);
				} else {
					// 普通页面跳转，正常认证
					console.log('🔒 实时认证：普通页面跳转，执行正常验证');
					this.smartVerifyLoginStatus(false);
				}
			} else {
				// 白名单页面，跳过认证
				console.log('✅ 实时认证：当前为白名单页面，安全跳过认证');
			}
			
			// 立即保存当前路径
			uni.setStorageSync('last_visited_path', currentPath);
		},
		
		// 获取页面显示名称
		getPageName(path) {
			const pageNames = {
				'/pages/index/index': '首页',
				'/pages/test/cast-test': '投屏测试页',
				'/pages/test/auth-test': '认证测试页',
				'/pages/test/test': '测试页',
				'/pages/play/play': '播放页',
				'/pages/search/search': '搜索页',
				'/pages/alpay/alpay': '支付页'
			};
			
			return pageNames[path] || path;
		},
		
		// 获取当前页面路径（实时）
		getCurrentPagePath() {
			let currentPath = '';
			
			// 优先使用uni-app的路由信息（实时更新）
			try {
				const pages = getCurrentPages();
				if (pages && pages.length > 0) {
					const currentPage = pages[pages.length - 1];
					if (currentPage && currentPage.route) {
						currentPath = '/' + currentPage.route;
						return currentPath;
					}
				}
			} catch (e) {
				console.log('使用uni-app路由获取失败，使用备用方案');
			}
			
			// 备用方案：使用window.location
			if (typeof window !== 'undefined' && window.location) {
				currentPath = window.location.pathname;
				if (currentPath.endsWith('.html')) {
					currentPath = currentPath.replace('.html', '');
				}
				currentPath = currentPath.split('?')[0].split('#')[0];
				if (!currentPath.startsWith('/')) {
					currentPath = '/' + currentPath;
				}
			}
			
			return currentPath;
		},
		
		// 设置路由变化监听器
		setupRouteListener() {
			// 监听uni-app路由变化
			if (typeof uni !== 'undefined' && uni.addInterceptor) {
				// 监听页面跳转
				uni.addInterceptor('navigateTo', {
					invoke: (args) => {
						console.log('🔄 路由监听：页面跳转至', args.url);
						// 跳转前立即检查认证
						this.checkAuthOnResume();
						return true;
					}
				});
				
				// 监听页面返回
				uni.addInterceptor('navigateBack', {
					invoke: (args) => {
						console.log('🔄 路由监听：页面返回');
						// 返回前立即检查认证
						setTimeout(() => {
							this.checkAuthOnResume();
						}, 100);
						return true;
					}
				});
				
				console.log('✅ 路由监听器已启动');
			} else {
				console.log('⚠️  uni.addInterceptor不可用，使用备用方案');
				
				// 备用方案：监听popstate事件（浏览器返回按钮）
				if (typeof window !== 'undefined') {
					window.addEventListener('popstate', () => {
						console.log('🔄 浏览器返回事件触发');
						setTimeout(() => {
							this.checkAuthOnResume();
						}, 100);
					});
				}
			}
		},
		
		// 智能登录状态验证
		async smartVerifyLoginStatus(isStrict = false) {
			try {
				const user = uni.getStorageSync('user');
				
				if (user && user.openId && user.id) {
					const currentTime = new Date().getTime();
					
					if (user.statusCreate < currentTime) {
						console.log('🔒 智能认证：用户登录已过期，需要重新登录');
						let res = await loginStatus(user.id);
						uni.removeStorageSync('user');
						uni.setStorageSync('user', res);
					} else if (isStrict) {
						// 严格模式：从白名单跳转过来，即使已登录也重新验证
						console.log('🔒 智能认证：严格模式，重新验证登录状态');
						this.loginAndGetCode();
					} else {
						console.log('✅ 智能认证：用户已登录，状态正常');
					}
				} else {
					console.log('🔒 智能认证：用户未登录，需要登录');
					this.loginAndGetCode();
				}
			} catch (error) {
				console.error('智能认证验证失败:', error);
				console.log('🔒 智能认证：验证异常，强制重新登录');
				this.loginAndGetCode();
			}
		},

		// 验证登录状态（不触发自动登录）
		async verifyLoginStatus() {
			try {
				const user = uni.getStorageSync('user');
				if (user && user.openId && user.id) {
					// 检查用户状态是否过期
					if (user.statusCreate < new Date().getTime()) {
						let res = await loginStatus(user.id);
						uni.removeStorageSync('user');
						uni.setStorageSync('user', res);
					} else {
						console.log('用户已登录，状态正常');
					}
				} else {
					console.log('用户未登录，需要登录');
					this.loginAndGetCode();
				}
			} catch (error) {
				console.error('验证登录状态失败:', error);
			}
		},

		// 登录并获取code
		async loginAndGetCode() {
			try {
				// 检查是否已有用户信息
				const user = uni.getStorageSync('user');
				if (user && user.openId && user.id) {
					console.log('用户已登录，openId:', user.openId);
					console.log('user.statusCreate:', user.statusCreate);
					console.log('new Date().getTime():', new Date().getTime());
					// 检查用户状态是否过期
					if (user.statusCreate < new Date().getTime()) {
						let res = await loginStatus(user.id);
						uni.removeStorageSync('user');
						uni.setStorageSync('user', res);
					}
					return;
				}

				// 显示加载提示
				uni.showLoading({
					title: '正在登录...',
					mask: true
				});

				this.handleH5WechatLogin();

			} catch (error) {
				console.error('登录失败:', error);
				uni.hideLoading();
				uni.showToast({
					title: '登录失败，请重试',
					icon: 'none',
					duration: 2000
				});

				// 3秒后重试
				setTimeout(() => {
					this.loginAndGetCode();
				}, 3000);
			}
		},

		// H5环境微信网页授权登录
		handleH5WechatLogin() {
			// 检查URL中是否已有code参数（微信授权回调）
			const urlParams = new URLSearchParams(window.location.search);
			const code = urlParams.get('code');

			if (code) {
				this.sendCodeToBackend(code);

			} else {
				// 检查当前是否在腾讯云部署环境
				const isTencentCloudDeploy = window.location.origin.includes('tcloud.com');

				if (isTencentCloudDeploy) {
					// 在腾讯云环境，需要重定向到实际的后端地址（包含端口）进行处理
					const authRedirectUrl =
						`https://min.erkantv.cn:8083${window.location.pathname}${window.location.search}`;
					window.location.href = authRedirectUrl;
				} else {
					// 没有code，跳转到微信授权页面
					this.redirectToWechatAuth();
				}
			}
		},

		// 跳转到微信授权页面
		redirectToWechatAuth() {
			// 使用完整的当前页面URL作为回调地址（包含协议、域名、端口）
			const currentUrl = window.location.origin + window.location.pathname;
			const redirectUri = encodeURIComponent(currentUrl);
			const authUrl =
				`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${wechatConfig.appId}&redirect_uri=${redirectUri}&response_type=code&scope=${wechatConfig.scope}&state=${wechatConfig.state}#wechat_redirect`;

			window.location.href = authUrl;
		},

		// 发送code到后端
		async sendCodeToBackend(code) {
			try {
				// const requestUrl = `https://min.erkantv.cn:8083/api/wechat/auth?code=${encodeURIComponent(code)}`;

				// 发起请求（注意：await 返回的是 res 对象，不是 [err, res]）
				const response = await uni.request({
					url: "https://min.erkantv.cn:8083/api/wechat/auth",
					method: 'POST',
					data: {
						code: code,
						shareUserId: 0
					},
					// header 可选，无 body 可不设
					header: {
						'content-type': 'application/json'
					}
				});

				const {
					statusCode,
					data
				} = response;

				// 检查 HTTP 状态码
				if (statusCode >= 200 && statusCode < 300) {
					console.log("user信息:", data)
					// 假设 data 是用户信息
					uni.setStorageSync('user', data.data);
					uni.hideLoading();
					uni.showToast({
						title: '登录成功',
						icon: 'success',
						duration: 2000
					});

				} else {
					throw new Error(`请求失败: ${statusCode} ${JSON.stringify(data)}`);
				}
			} catch (error) {
				console.error('发送code失败:', error);
				uni.hideLoading();
				uni.showToast({
					title: '授权失败，请重试',
					icon: 'none',
					duration: 2000
				});

				// 显示具体错误（用于调试）
				uni.showModal({
					title: "请求错误",
					content: error.message || '未知错误'
				});
			}
		}
		,
		// 全局微信分享初始化
		async initGlobalWeChatShare() {
			try {
				console.log('🌐 全局微信分享初始化...');

				// 只在微信环境中初始化分享
				const isWeChat = navigator.userAgent.toLowerCase().includes('micromessenger');
				if (!isWeChat) {
					console.log('📱 非微信环境，跳过全局分享初始化');
					return;
				}

				// 使用统一的微信分享初始化工具
				const success = await initWeChatShare({
					title: '实用小程序推荐',
					desc: '发现好用的H5小程序，点击立即体验',
					imgUrl: 'https://min.erkantv.cn/static/icon/geid.png'

				});

				if (success) {
					console.log('✅ 全局微信分享初始化完成');

				} else {
					console.log('❌ 全局微信分享初始化失败');

				}


			} catch (error) {
				console.error('❌ 全局微信分享初始化异常:', error.message);

			}

		}
	}
}

</script>


<style lang="scss">
@font-face {
	font-family: 'CustomFont';
	src: url('https://ikran-1329659431.cos.ap-guangzhou.myqcloud.com/font/UKIJTuT.ttf') format('truetype');
	font-weight: normal;
	font-style: normal;
	font-display: swap;
	/* 避免文字闪现 */
}

.uni-tabbar {
	font-family: 'CustomFont', sans-serif !important;
}

.uni-tabbar .uni-tabbar__item__text {
	font-family: 'CustomFont', sans-serif !important;
}

/*每个页面公共css */
page {
	background: #000000;
	color: #fff;
	font-family: 'CustomFont', sans-serif;

	swiper-item ::-webkit-scrollbar {
		width: 0;
		height: 0;
		color: transparent;
		display: none;
	}

	/* 隐藏所有滚动条 */
	::-webkit-scrollbar {
		display: none;
		width: 0;
		height: 0;
	}

}
</style>